草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

c++ - 尝试使用 Win32 线程进行异步 I/O

我正在为Windows编写串口软件。为了提高性能,我试图将例程转换为使用异步I/O。我已经编写了代码并且运行得相当好,但我是这方面的半初学者,我想进一步提高程序的性能。在程序的压力测试期间(即以高波特率尽可能快地将数据传入/传出端口),CPU负载变得相当高。如果有人在Windows中使用过异步I/O和多线程,请看一下我的程序,我将不胜感激。我主要担心两个问题:异步​​I/O是否正确实现?我在网上找到了一些相当可靠的来源,建议您可以将用户数据传递给回调函数,方法是在最后用您自己的数据实现您自己的OVERLAPPED结构。这似乎工作得很好,但对我来说确实有点“hackish”。此外,当我从

具有全局变量的 C++ 多线程

有人知道原始全局变量是否线程安全吗?//globalvariableintcount=0;voidthread1(){count++;}voidthread2(){count--;if(count==0)print("Stuffthing");}我可以在没有对count进行任何锁定保护的情况下这样做吗?谢谢。 最佳答案 这不是线程安全的。你在这里有一个竞争条件。原因是count++不一定是原子的(意味着不是单个处理器操作)。该值首先加载,然后递增,然后写回。在每个步骤之间,另一个线程也可以修改该值。

【Linux】线程概念和线程控制

线程概念一、理解线程1.Linux中的线程2.重新定义线程和进程3.进程地址空间之页表4.线程和进程切换5.线程的优点6.线程的缺点7.线程异常8.线程用途9.线程和进程二、线程控制1.pthread线程库(1)pthread_create()(2)pthread_join()(3)pthread_exit()(4)pthread_cancel()(5)简单使用pthread库2.理解线程库(1)线程id(2)线程栈(3)线程局部存储3.分离线程一、理解线程什么是线程呢?下面我们直接说定义,再理解。线程就是进程内的一个执行分支,线程的执行粒度要比进程细。1.Linux中的线程下面我们开始理解一

c++ - 从不同线程写入 boost::asio 套接字

在我们的应用程序中,我们使用Boost库(以及用于网络通信的ASIO)。最近,我们发现如果我们通过同一个套接字从不同线程发送数据,我们的客户端应用程序将接收到垃圾数据。突出问题的小测试:#include#include#includevoidsend_routine(boost::shared_ptrs,charc){std::vectordata(15000,c);data.push_back('\n');for(inti=0;i(newtcp::socket(io_service));socket->connect(*iterator);boost::threadt1(send_r

c++ - 通过引用线程传递数组的问题

我正在学习线程,并且找到了一些简单的示例。我希望做的是创建5个线程,每个线程将一个随机数分配给20个int的数组。然后最后有另外5个线程将这个数组重建为一个更大的100大小的int。这是我之前尝试的一些代码。我希望能够通过引用传递数组,但没有成功。任何想法将不胜感激,请记住,我是线程的新手#include#include#include#include#include//#includeusingnamespacestd;voidmyThread(void*dummy);voidmyThread2(void*dummy);intmain(){ofstreammyfile;myfile.

c++ - LibAv/FFMpeg 的线程安全性?

LibAV/FFMpeg线程安全吗?例如。我可以在一个线程中使用AVFormatContext*从一个文件中读取文件,然后通过简单地添加互斥锁在另一个线程中解码读取的数据包,或者库的线程安全性是一种“不知道不关心”类型的交易吗?我知道libav对编码器线程有基本支持,但我正在尝试更多的黑盒类型方法,我将它分成多个线程(源->解码器->过滤器->编码器->接收器)并试图理解复杂性任何对ffmpeg和线程有任何经验并愿意提供与此相关的任何其他信息的人也将不胜感激。 最佳答案 您可以注册自己的锁管理器。ffmpeg库将控制线程安全。例子:

c++ - 如果存在仅推送线程和仅弹出线程,C++ std::queue 是否安全?

我想知道这种情况是否(线程)安全。有一个线程只推送到一个std::queue。还有另一个线程只从std::queue弹出。由于队列是否为空,线程安全地管理,后面的线程不会弹出失败。你能帮帮我吗?谢谢。 最佳答案 我认为答案是否定的。标准说(§23.2.2/1):Forpurposesofavoidingdataraces(17.6.5.9),implementationsshallconsiderthefollowingfunctionstobeconst:begin,end,rbegin,rend,front,back,data,

c++ - 为什么有些线程池实现不使用生产者和消费者模型

我打算实现一个线程池来管理我项目中的线程。我想到的线程池的基本结构是队列,一些线程将任务生成到这个队列中,一些线程池管理的线程正在等待处理这些任务。我认为这是类生产者和消费者问题。但是当我在网上google线程池实现时,我发现那些实现很少使用这种经典模型,所以我的问题是为什么他们不使用这种经典模型,这种模型有什么缺点吗?为什么他们不使用全信号量和空信号量来同步? 最佳答案 如果您有多个线程在等待一个资源(在本例中为信号量和队列),那么您正在制造一个瓶颈。即使您有多个工作人员,您也会强制所有任务通过一个队列。从逻辑上讲,如果工作人员通

c++ - 在 main() 的线程中调用对象成员函数

这个问题在这里已经有了答案:Startthreadwithmemberfunction(5个答案)关闭8年前。我发现了很多关于在类中创建新线程的信息(Passingmemberfunctionstostd::thread)但是否有可能以某种方式执行以下操作:#include#includeusingnamespacestd;classmyClass{public:myClass(){myInt=2;};voidmyFun(){++myInt;}intret_myInt(){returnmyInt;}private:intmyInt;};intmain(void){myClassmyOb

c++ - 混合 C 和 C++ 的线程同步

我有一个多线程程序,主线程是第三方(无法更改)和纯C。我的任务是围绕它构建新模块(在C++中),这些模块部分驻留在其他线程中,需要使用C程序的接口(interface)。基本上只是读取在C线程中存储和更新的一些变量(整数、float,没有什么复杂的)。现在回答我的问题:我如何确保在访问这些变量时不会从C接口(interface)中获取垃圾,因为我无法在读取时使用互斥锁来锁定它。这可能吗?或者写一个float/int无论如何都是原子操作? 最佳答案 不幸的是,像“写一个float/int[是]原子操作”这样的语句在C或C++中没有很好